//
// Created by LiuYou on 2021/6/22.
//

#include <cstdlib>
#include <fcntl.h>
#include <cstdio>
#include <unistd.h>

/**
 * @brief 这个例子是一个伪代码程序。请注意。
 */
int main() {
    int fd1 = open("file1", O_CREAT);
    if (fd1 < 0) {
        std::perror("");
        std::exit(1);
    }

    // 如果执行到这里, 有人来取消这个线程了。那么还没有来得及 close()归还资源。
    // 解决办法: 线程的钩子函数
    // pthread_cleanup_push()
    // 往钩子函数上挂一个函数 close(fd1);。


    int fd2 = open("file2", O_CREAT);
    if (fd2 < 0) {
        std::perror("");
        std::exit(1);
    }

    // 同理, fd2也是一样的。
    // 也使用 线程的钩子函数


    // 使用了线程的钩子函数, 那就没有必要写下面两行代码了。
//    close(fd1);
//    close(fd2);

    std::exit(0);
}